package com.ruoyi.lxzx.controller;

import com.github.pagehelper.PageInfo;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.lxzx.appDTO.lxjhDTO.UserActivitySaveDTO;
import com.ruoyi.lxzx.appDTO.lxlbDTO.SearchDTO;
import com.ruoyi.lxzx.appDTO.lxlbDTO.SqrqshDTO;
import com.ruoyi.lxzx.appDTO.lxlbDTO.UserCardDto;
import com.ruoyi.lxzx.appVO.lxjhVO.hdjhDetailVO;
import com.ruoyi.lxzx.appVO.lxjhVO.hdjhVO;
import com.ruoyi.lxzx.appVO.lxlbVO.LxlbListDetailVO;
import com.ruoyi.lxzx.appVO.lxlbVO.LxlbListVO;
import com.ruoyi.lxzx.appVO.lxqlVO.GroupMemberListVO;
import com.ruoyi.lxzx.appVO.lxqlVO.GroupMessageVO;
import com.ruoyi.lxzx.appVO.lxqlVO.GroupVO;
import com.ruoyi.lxzx.domain.*;
import com.ruoyi.lxzx.service.IAppService;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 老乡圈Controller
 *
 * @author ruoyi
 * @date 2024-10-26
 */
@RestController
@RequestMapping("/lxzx/app")
@AllArgsConstructor
public class AppController extends BaseController {

    private final IAppService service;

//    找老乡的相关接口

    /**
     * 老乡列表
     */
    @GetMapping("/zlx/lxlb")
    public R lxlb(SearchDTO param) {
        startPage();
        List<LxlbListVO> result = service.lxlb(param);
        PageInfo page = new PageInfo<>(result);
        if (page.getPages() < param.getPageNum()) {
            return R.ok(new PageInfo<>(result));
        } else {
            return R.ok(page);
        }
    }

    /**
     * 关注
     */
    @PostMapping("/zlx/gzlx")
    public R gzlx(@RequestParam Long userId) {
        service.gzlx(userId);
        return R.ok();
    }

    /**
     * 取消关注
     */
    @GetMapping("/zlx/qxgzlx")
    public R qxgzlx(@RequestParam Long userId) {
        service.qxgzlx(userId);
        return R.ok();
    }

    /**
     * 登录后查看自己的名片
     */
    @GetMapping("/zlx/dlckmp")
    public R dlckmp() {
        LxlbListDetailVO result = service.dlckmp();
        return R.ok(result);
    }

    /*
     * 查看名片
     */
    @GetMapping("/zlx/ckmp")
    public R ckmp(Long userId) {
        LxlbListDetailVO result = service.ckmp(userId);
        return R.ok(result);
    }
    @PutMapping("/zlx/card/{id}")
    public R remove(@PathVariable Long id, @RequestBody UserCard userCard)
    {
        userCard.setId(id);
        System.out.println(userCard);
        return R.ok(service.updateUserRemoveCard(userCard));
    }
//    老乡聚会的相关接口

    /**
     * 聚会活动的列表
     */
    @GetMapping("/lxjh/hdjh")
    public R hdjh(SearchDTO param) {
        startPage();
        List<hdjhVO> result = service.hdjh();
        PageInfo page = new PageInfo<>(result);
        if (page.getPages() < param.getPageNum()) {
            return R.ok(new PageInfo<>());
        } else {
            return R.ok(page);
        }
    }

    /**
     * 详情
     */
    @GetMapping("/lxjh/hdjhxq")
    public R hdjhxq(@RequestParam Long id) {
        hdjhDetailVO result = service.hdjhxq(id);
        return R.ok(result);
    }

    /**
     * 删除活动聚合
     * @param activityId
     * @return
     */
    @GetMapping("/lxjh/scjh")
    public R scjh(@RequestParam Long activityId) {
        service.scjh(activityId);
        return R.ok();
    }

    /**
     * 活动聚合--报名人数已满
     * @param activityId
     * @return
     */
    @GetMapping("/lxjh/jhbmFill")
    public R jhbmFill(@RequestParam Long activityId) {
        service.jhfill(activityId);
        return R.ok();
    }

    /**
     * 查看报名人
     *
     * @param id
     * @return
     */
    @GetMapping("/lxjh/hdjhybmr")
    public R hdjhybmr(@RequestParam Long id) {
        return R.ok(service.hdjhybmr(id));
    }

    /**
     * 报名
     */
    @GetMapping("/lxjh/hdbm")
    public R hdbm(@RequestParam Long activityId, @RequestParam Long userId) {
        service.hdbm(activityId, userId);
        return R.ok();
    }

    /**
     * 取消报名
     */
    @GetMapping("/lxjh/hdqxbm")
    public R hdqxbm(@RequestParam Long activityId, @RequestParam Long userId) {
        service.hdqxbm(activityId, userId);
        return R.ok();
    }

    /**
     * 发布活动/聚会
     */
    @PostMapping("/lxjh/fbhd")
    public R fbhd(@RequestBody UserActivitySaveDTO userActivity) {
        service.fbhd(userActivity);
        return R.ok();
    }

//    老乡群的相关接口

    /**
     * 群列表
     */
    @GetMapping("/lxq/qlb")
    public R qlb(SearchDTO param) {
        startPage();
        List<GroupVO> result = service.qlb();
        PageInfo page = new PageInfo<>(result);
        if (page.getPages() < param.getPageNum()) {
            return R.ok(new PageInfo<>());
        } else {
            return R.ok(page);
        }
    }

    @GetMapping("/lxq/scq")
    public R scq(@RequestParam Long groupId) {
        service.scq(groupId);
        return R.ok();
    }

    /**
     * 群成员
     */
    @GetMapping("lxq/qcy")
    public R qcy(SearchDTO param) {
        startPage();
        List<GroupMemberListVO> result = service.qcy(param.getGroupId());
        PageInfo page = new PageInfo<>(result);
        if (page.getPages() < param.getPageNum()) {
            return R.ok(new PageInfo<>());
        } else {
            return R.ok(page);
        }
    }

    /**
     * 群详情
     */
    @GetMapping("lxq/qxq")
    public R qxq(@RequestParam Long groupId) {
        return R.ok(service.qxq(groupId));
    }

    /**
     * 群聊天
     */
    @GetMapping("/lxq/qlt")
    public R qlt(SearchDTO param) {
        startPage();
        List<GroupMessageVO> result = service.qlt(param.getGroupId());
        PageInfo page = new PageInfo<>(result);
        if (page.getPages() < param.getPageNum()) {
            return R.ok(new PageInfo<>());
        } else {
            return R.ok(page);
        }
    }

    /**
     * 刷新群聊天
     */
    @GetMapping("/lxq/sxqlt")
    public R sxqlt(Long groupId,Long id) {
        List<GroupMessageVO> result = service.sxqlt(groupId,id);
        return R.ok(result);
    }

    /**
     * 发送消息
     */
    @PostMapping("/lxq/fsxx")
    public R fsxx(@RequestBody GroupMessage gm) {
        return R.ok(service.fsxx(gm));
    }

    /**
     * 撤销发送消息
     */
    @PostMapping("/lxq/cxfsxx")
    public R cxfsxx(@RequestBody GroupMessage gm) {
        return R.ok(service.cxfsxx(gm));
    }

    /**
     * 撤销发送消息
     */
    @PostMapping("/lxq/scfsxx")
    public R scfsxx(@RequestBody GroupMessage gm) {
        return R.ok(service.scfsxx(gm));
    }

    /**
     * 申请入群
     */
    @GetMapping("/lxq/sqrq")
    public R sqrq(@RequestParam Long groupId) {
        service.sqrq(groupId);
        return R.ok();
    }

    /**
     * 申请入群审核
     */
    @PostMapping("/lxq/sqrqsh")
    public R sqrqsh(@RequestBody SqrqshDTO shDto) {
        service.sqrqsh(shDto);
        return R.ok();
    }

    /**
     * 我的群
     */
    @GetMapping("/lxq/wdq")
    public R wdq(SearchDTO param) {
        startPage();
        List<GroupVO> result = service.wdq();
        PageInfo page = new PageInfo<>(result);
        if (page.getPages() < param.getPageNum()) {
            return R.ok(new PageInfo<>());
        } else {
            return R.ok(page);
        }
    }

    /**
     * 创建群
     */
    @PostMapping("/lxq/cjq")
    public R cjq(@RequestBody Group group) {
        service.cjq(group);
        return R.ok();
    }
    /**
     * 修改群
     */
    @PostMapping("/lxq/xgq")
    public R xgq(@RequestBody Group group) {
        service.xgq(group);
        return R.ok();
    }
//    项目合作的相关接口（朋友圈）

    /**
     * 发布项目
     */
    @PostMapping("/xmhz/fbxm")
    public R fbxm(@RequestBody UserCircle userCircle) {
        service.fbxm(userCircle);
        return R.ok();
    }

    /**
     * 删除项目
     * @param circleId
     * @return
     */
    @GetMapping("/xmhz/scxm")
    public R scxm(@RequestParam Long circleId) {
        service.scxm(circleId);
        return R.ok();
    }

    /**x
     * 项目列表
     */
    @GetMapping("/xmhz/xmlb")
    public R xmlb(SearchDTO param) {
        return R.ok(service.xmlb(param));
    }
    /**
     * 我的项目列表
     */
    @GetMapping("/xmhz/wdxmlb")
    public R wdxmlb(SearchDTO param) {
        return R.ok(service.wdxmlb(param));
    }

    /**
     * 项目详情
     */
    @GetMapping("/xmhz/xmxq")
    public R xmxq(@RequestParam Long circleId) {
        return R.ok(service.xmxq(circleId));
    }

    /**
     * 项目点赞
     */
    @GetMapping("/xmhz/xmdz")
    public R xmdz(@RequestParam Long circleId) {
        return R.ok(service.xmdz(circleId));
    }

    /**
     * 取消项目点赞
     */
    @GetMapping("/xmhz/qxxmdz")
    public R qxxmdz(@RequestParam Long circleId) {
        service.qxxmdz(circleId);
        return R.ok();
    }

    /**
     * 项目评论
     */
    @GetMapping("/xmhz/xmpl")
    public R xmpl(@RequestParam Long circleId) {
        return R.ok(service.xmpl(circleId));
    }

    /**
     * 发布评论
     *
     * @param id
     * @return
     */
    @PostMapping("/xmhz/fbpl")
    public R fbpl(@RequestBody UserCircleDiscuss ucd) {
        if (ucd == null || ucd.getContent() == null) {
            throw new ServiceException("没有评论内容,请填写");
        }
        service.fbpl(ucd);
        return R.ok(ucd);
    }

    /**
     * 删除评论
     *
     * @param id
     * @return
     */
    @GetMapping("/xmhz/scpl")
    public R scpl(@RequestParam Long id) {
        service.scpl(id);
        return R.ok();
    }
//    个人中心的相关接口

    /**
     * 实名认证
     */
    @PostMapping("/grzx/smrz")
    public R smrz(@RequestBody UserReal ur) {
        service.smrz(ur);
        return R.ok();
    }

    /**
     * 地址
     */
    @GetMapping("/grzx/hqdz")
    public R hqdz(@RequestParam Long userId) {
        return R.ok(service.hqdz(userId));
    }
    /**
     * 名片
     */
    /**
     * 修改名片
     */
    @PostMapping("/grzx/xgmp")
    public R xgmp(@RequestBody UserCardDto userCard) {
        Boolean flag = service.xgmp(userCard);
        if( flag){
            return R.ok("修改成功");
        }else{
            return R.fail("名片已经存在,不能重复保存");
        }
    }

    /**
     * 积分
     */
    @GetMapping("/grzx/hqjf")
    public R hqjf(@RequestParam Long userId) {
        return R.ok(service.hqjf(userId));
    }

    /**
     * 积分详情
     */
    @GetMapping("/grzx/jfxq")
    public R jfxq(@RequestParam Long userId) {
        return R.ok(service.jfxq(userId));
    }

    /**
     * 我的聚会:我发布的
     */
    @GetMapping("/grzx/wdjh")
    public R wdjh() {
        return R.ok(service.wdjh());
    }

    /**
     * 我的老乡：申请管理
     */
    @GetMapping("/grzx/sqgl")
    public R sqgl() {
        return R.ok(service.sqgl());
    }

    /**
     * 我的老乡：我的关注
     */
    @GetMapping("/grzx/wdgz")
    public R wdgz() {
        return R.ok(service.wdgz());
    }

    /**
     * 更新现居地
     */
    @GetMapping("/grzx/gxxjd")
    public R gxxjd(String addressPresent) {
        service.gxxjd(addressPresent);
        return R.ok();
    }

    /**
     * 更新 头像
     */
    @GetMapping("/grzx/xgtx")
    public R xgtx(String img) {
        service.xgtx(img);
        return R.ok();
    }
}
